【Docker】容器连接到mysql(容器互联 超详细) |
您所在的位置:网站首页 › docker link mysql › 【Docker】容器连接到mysql(容器互联 超详细) |
场景:
docker容器实现连接到mysql容器,这里博主是想用nacos容器连接到mysql容器。 前提需要:mysql容器必须有nacos数据库 (必须做好这一步先) 方式一:通过--link互联,适用于容器网络属于docker01、启动mysql容器,这里对外暴露端口为3366 docker run -p 3366:3306 \ --name mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /myData/mysql/data:/var/lib/mysql \ -d mysql2、启动nacos容器,使用--link到mysql docker run --name nacos8849 -p 8849:8848 \ -e JVM_XMS=128m \ -e JVM_XMX=256m \ -e MODE=standalone \ -e PREFER_HOST_MODE=hostname \ -v /myData/nacos8849/logs:/home/nacos/logs \ -v /myData/nacos8849/conf/application.properties:/home/nacos/conf/application.properties \ --privileged=true \ --link mysql \ -d nacos/nacos-server:1.4.13、进入到nacos容器 docker exec -it nacos8849的容器id /bin/bash4、尝试ping mysql,正常情况下使用mysql01容器名和容器ip都可ping通 5、vim打开nacos的application.properties,修改数据库连接信息。切记端口是3306! # 注意这里的ip可以用容器名,也可以用mysql容器的ip # 端口是3306!!!而不是对外暴露的端口3366!!! db.url.0=jdbc:mysql://mysql:3306/nacos?characterEncoding=utf86、修改后重启nacos容器 docker restart nacos8849容器id # 查看nacos的启动日志,博主运行镜像时指定了映射文件,故直接执行 cat /myData/nacos8849/logs/start.out7、看到启动日志成功状态即完成了。 方式二:通过自定义网络互联(推荐)1、首先创建自定义网络,使用bridge网桥模式 docker network create --driver bridge \ --subject 192.168.0.0/24 \ --gateway 192.168.0.1 mynet2、运行镜像分别创建mysql容器和nacos容器,记得使用--net 指定我们刚创建的网络 # 创建mysql容器 docker run -p 3367:3306 \ --name mysql02 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /myData/mysql02/data:/var/lib/mysql \ --net mynet \ -d mysql #创建nacos容器 docker run --name nacos8850 -p 8850:8848 \ -e JVM_XMS=128m \ -e JVM_XMX=512m \ -e MODE=standalone \ -e PREFER_HOST_MODE=hostname \ -v /myData/nacos8850/logs:/home/nacos/logs \ -v /myData/nacos8850/conf/application.properties:/home/nacos/conf/application.properties \ --net mynet \ --privileged=true \ -d nacos/nacos-server:1.4.13、创建完后进入nacos容器 docker exec -it nacos8850的容器id /bin/bash # 尝试ping mysql容器 # 此时发现在nacos容器里可以直接ping通mysql容器,通过ip和容器名称都可以 # 但是ping不通宿主机ip,故要去实现跟宿主机的网络连通4、虽然nacos容器里能直接ping通mysql容器,但是在nacos配置文件配置上mysql02的连接信息后重新运行nacos容器,发现运行日志报错:连接不上mysql容器 在本机用navicat去远程连接通过自定义网络运行的mysql容器,发现也连接不上! 5、查看原因 (这一步不用跟着敲) # 查看网络列表 docker network ls查看bridge的网络情况 docker network inspect 825637cadc03我们看到Containers里没有我们刚创建的自定义网络的容器信息,才导致外界连接不上mysql容器。知道原因就好解决了! 6、网络连通,将容器nacos8850和容器mysql02加到bridge网络。 docker network connect bridge nacos8850 docker network connect bridge mysql027、更改nacos8850的application.properties文件。 db.url.0=jdbc:mysql://mysql02:3306/nacos?characterEncoding=utf88、重新运行拿nacos8850容器,发现启动成功。至此完成。 如有不对,请大佬多多指出,小白刚学docker被这坑了好久 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |